/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * JFrameMenuEstoqueItemProduto.java
 *
 * Created on 12/11/2011, 20:17:14
 */
package gui.estoque;

import banco.estoque.BancoProduto;
import excecoes.estoque.DinheiroNegativoException;
import excecoes.estoque.NenhumProdutoEncontradoException;
import excecoes.estoque.ProdutoCadastradoException;
import excecoes.estoque.QuantidadeNegativaException;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import smartMarket.estoque.Produto;

/**
 *
 * @author dyego
 */
public class JFrameNovoProduto extends javax.swing.JFrame {

    // Atributos
    private BancoProduto estoque;
    private String acao;
    private Integer linhaSelecionada = null;

    // Construtor
    public JFrameNovoProduto() {
        this.initProduto();
        this.estoque = new BancoProduto();
        this.acao = "cadastrar";
    }

    public JFrameNovoProduto(String codigoBarras, int linha) {
        this.initProduto(codigoBarras);
        this.estoque = new BancoProduto();
        this.acao = "alterar";
        this.linhaSelecionada = linha;
    }

    // Métodos
    private Produto getTextField() throws NumberFormatException, DinheiroNegativoException, QuantidadeNegativaException {
        Produto novoProduto = new Produto();

        novoProduto.setAtivo(jCheckBoxAtivo.isSelected());
        novoProduto.setCodigoDeBarras(jTextFieldCodigoDeBarras.getText());
        novoProduto.setDescricao(jTextFieldDescricao.getText());
        novoProduto.setPreco(Float.parseFloat(jFormattedTextFieldPreco.getText().replace(".", "").replace(",", ".")));
        novoProduto.setCusto(Float.parseFloat(jFormattedTextFieldCusto.getText().replace(".", "").replace(",", ".")));
        novoProduto.setQuantidade(Integer.parseInt(jFormattedTextFieldQuantidade.getText()));
        novoProduto.setQuantidadeMinima(Integer.parseInt(jFormattedTextFieldQuantidadeMinima.getText()));
        novoProduto.setCodigo(Integer.parseInt(jTextFieldCodigo.getText()));

        return novoProduto;
    }

    private void cadastrar() {
        try {
            Produto novoProduto = getTextField();

            estoque.novo(novoProduto);
            Object[] addTable = {novoProduto.getCodigo(),
                novoProduto.getCodigoDeBarras(),
                novoProduto.getDescricao(),
                novoProduto.getPreco(),
                novoProduto.getCusto(),
                novoProduto.getQuantidade()};

            JFrameTableEstoque.model.addRow(addTable);

            JOptionPane.showMessageDialog(null, "Produto inserido com sucesso");

            this.setVisible(false);

        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, "Erro no formato do dinheiro");
        } catch (SQLException SQLe) {
            JOptionPane.showMessageDialog(null, "Erro durante a conexão com o banco de dados");
        } catch (NullPointerException npe) {
            JOptionPane.showMessageDialog(null, "");
        } catch (ProdutoCadastradoException pce) {
            JOptionPane.showMessageDialog(null, pce.getMessage());
        } catch (DinheiroNegativoException dne) {
            JOptionPane.showMessageDialog(null, dne.getMessage());
        } catch (QuantidadeNegativaException qne) {
            JOptionPane.showMessageDialog(null, qne.getMessage());
        }


    }

    private void alterar() {

        try {
            Produto novoProduto = getTextField();

            estoque.alterar(novoProduto);



            Object[] insertTable = {novoProduto.getCodigo(),
                novoProduto.getCodigoDeBarras(),
                novoProduto.getDescricao(),
                novoProduto.getPreco(),
                novoProduto.getCusto(),
                novoProduto.getQuantidade()};

            JFrameTableEstoque.model.removeRow(this.linhaSelecionada);
            JFrameTableEstoque.model.insertRow(this.linhaSelecionada, insertTable);

            JOptionPane.showMessageDialog(null, "Produto alterado com sucesso");
            this.setVisible(false);

        } catch (NumberFormatException nfe) {
            JOptionPane.showMessageDialog(null, nfe.getMessage());
        } catch (DinheiroNegativoException dne) {
            JOptionPane.showMessageDialog(null, dne.getMessage());
        } catch (QuantidadeNegativaException qne) {
            JOptionPane.showMessageDialog(null, qne.getMessage());
        } catch (SQLException SQLe) {
            JOptionPane.showMessageDialog(null, SQLe.getMessage());
        }
    }

    private void initProduto() {
        initComponents();

        BancoProduto bp = new BancoProduto();
        try {
            jTextFieldCodigo.setText("" + (bp.ultimoProduto() + 1));
        } catch (NumberFormatException e) {
        } catch (SQLException e) {
        } catch (DinheiroNegativoException e) {
        } catch (QuantidadeNegativaException e) {
        } catch (NenhumProdutoEncontradoException e) {
        }

    }

    private void initProduto(String codigoBarras) {
        initComponents();
        try {

            BancoProduto bp = new BancoProduto();
            Produto alterarProduto = bp.buscar(codigoBarras);
            jTextFieldCodigo.setText("" + alterarProduto.getCodigo());
            jCheckBoxAtivo.setSelected(alterarProduto.getAtivo());
            jTextFieldCodigoDeBarras.setText(alterarProduto.getCodigoDeBarras());
            jTextFieldDescricao.setText(alterarProduto.getDescricao());
            jFormattedTextFieldPreco.setText("" + alterarProduto.getPreco());
            jFormattedTextFieldCusto.setText("" + alterarProduto.getCusto());
            jFormattedTextFieldQuantidade.setText("" + alterarProduto.getQuantidade());
            jFormattedTextFieldQuantidadeMinima.setText("" + alterarProduto.getQuantidadeMinima());

        } catch (NumberFormatException e) {
        } catch (SQLException e) {
        } catch (DinheiroNegativoException e) {
        } catch (QuantidadeNegativaException e) {
        } catch (NenhumProdutoEncontradoException e) {
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelProduto = new javax.swing.JPanel();
        jLabelCodigo = new javax.swing.JLabel();
        jLabelCodigoDeBarras = new javax.swing.JLabel();
        jLabelDescricao = new javax.swing.JLabel();
        jTextFieldCodigo = new javax.swing.JTextField();
        jTextFieldCodigoDeBarras = new javax.swing.JTextField();
        jTextFieldDescricao = new javax.swing.JTextField();
        jPanelInformacoesEstoque = new javax.swing.JPanel();
        jLabelPreco = new javax.swing.JLabel();
        jLabelQuantidade = new javax.swing.JLabel();
        jLabelCusto = new javax.swing.JLabel();
        jLabelQuantidadeMinima = new javax.swing.JLabel();
        jFormattedTextFieldPreco = new javax.swing.JFormattedTextField();
        jFormattedTextFieldCusto = new javax.swing.JFormattedTextField();
        jFormattedTextFieldQuantidadeMinima = new javax.swing.JFormattedTextField();
        jCheckBoxAtivo = new javax.swing.JCheckBox();
        jFormattedTextFieldQuantidade = new javax.swing.JFormattedTextField();
        jButtonCadastrar = new javax.swing.JButton();
        jButtonCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanelProduto.setBorder(javax.swing.BorderFactory.createTitledBorder("Produto"));

        jLabelCodigo.setText("Código:");

        jLabelCodigoDeBarras.setText("Código de Barras:");

        jLabelDescricao.setText("Descrição:");

        jTextFieldCodigo.setEditable(false);

        javax.swing.GroupLayout jPanelProdutoLayout = new javax.swing.GroupLayout(jPanelProduto);
        jPanelProduto.setLayout(jPanelProdutoLayout);
        jPanelProdutoLayout.setHorizontalGroup(
            jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProdutoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelCodigo)
                    .addComponent(jLabelDescricao)
                    .addComponent(jLabelCodigoDeBarras))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTextFieldCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextFieldCodigoDeBarras, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextFieldDescricao, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE))
                .addContainerGap())
        );
        jPanelProdutoLayout.setVerticalGroup(
            jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProdutoLayout.createSequentialGroup()
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCodigo)
                    .addComponent(jTextFieldCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCodigoDeBarras)
                    .addComponent(jTextFieldCodigoDeBarras, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanelProdutoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelDescricao)
                    .addComponent(jTextFieldDescricao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanelInformacoesEstoque.setBorder(javax.swing.BorderFactory.createTitledBorder("Informações do Estoque"));

        jLabelPreco.setText("Preço em R$:");

        jLabelQuantidade.setText("Quantidade:");

        jLabelCusto.setText("Custo de Compra:");

        jLabelQuantidadeMinima.setText("Quantidade Mínima:");

        jFormattedTextFieldPreco.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,##0.00"))));
        jFormattedTextFieldPreco.setText("0,01");

        jFormattedTextFieldCusto.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,##0.00"))));
        jFormattedTextFieldCusto.setText("0,01");

        jFormattedTextFieldQuantidadeMinima.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#"))));
        jFormattedTextFieldQuantidadeMinima.setText("0");

        jCheckBoxAtivo.setSelected(true);
        jCheckBoxAtivo.setText("Ativo");

        jFormattedTextFieldQuantidade.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#"))));
        jFormattedTextFieldQuantidade.setText("0");

        javax.swing.GroupLayout jPanelInformacoesEstoqueLayout = new javax.swing.GroupLayout(jPanelInformacoesEstoque);
        jPanelInformacoesEstoque.setLayout(jPanelInformacoesEstoqueLayout);
        jPanelInformacoesEstoqueLayout.setHorizontalGroup(
            jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelInformacoesEstoqueLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelInformacoesEstoqueLayout.createSequentialGroup()
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabelQuantidade)
                            .addComponent(jLabelPreco))
                        .addGap(12, 12, 12)
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jFormattedTextFieldPreco, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jFormattedTextFieldQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 75, Short.MAX_VALUE)
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(jPanelInformacoesEstoqueLayout.createSequentialGroup()
                                .addGap(14, 14, 14)
                                .addComponent(jLabelCusto))
                            .addComponent(jLabelQuantidadeMinima))
                        .addGap(18, 18, 18)
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jFormattedTextFieldQuantidadeMinima, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jFormattedTextFieldCusto, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jCheckBoxAtivo, javax.swing.GroupLayout.Alignment.TRAILING))
                .addContainerGap())
        );
        jPanelInformacoesEstoqueLayout.setVerticalGroup(
            jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelInformacoesEstoqueLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelInformacoesEstoqueLayout.createSequentialGroup()
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jFormattedTextFieldCusto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelCusto))
                        .addGap(18, 18, 18)
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabelQuantidadeMinima)
                            .addComponent(jFormattedTextFieldQuantidadeMinima, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(jPanelInformacoesEstoqueLayout.createSequentialGroup()
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabelPreco)
                            .addComponent(jFormattedTextFieldPreco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanelInformacoesEstoqueLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jFormattedTextFieldQuantidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelQuantidade))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jCheckBoxAtivo)
                .addContainerGap())
        );

        jButtonCadastrar.setText("Cadastrar");
        jButtonCadastrar.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jButtonCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCadastrarActionPerformed(evt);
            }
        });

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButtonCadastrar))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jPanelInformacoesEstoque, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jPanelProduto, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(27, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(15, Short.MAX_VALUE)
                .addComponent(jPanelProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jPanelInformacoesEstoque, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonCadastrar)
                    .addComponent(jButtonCancelar))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
    this.setVisible(false);
}//GEN-LAST:event_jButtonCancelarActionPerformed

private void jButtonCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCadastrarActionPerformed
    if (acao.equals("cadastrar")) {
        cadastrar();
    } else {
        alterar();
    }
}//GEN-LAST:event_jButtonCadastrarActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonCadastrar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JCheckBox jCheckBoxAtivo;
    private javax.swing.JFormattedTextField jFormattedTextFieldCusto;
    private javax.swing.JFormattedTextField jFormattedTextFieldPreco;
    private javax.swing.JFormattedTextField jFormattedTextFieldQuantidade;
    private javax.swing.JFormattedTextField jFormattedTextFieldQuantidadeMinima;
    private javax.swing.JLabel jLabelCodigo;
    private javax.swing.JLabel jLabelCodigoDeBarras;
    private javax.swing.JLabel jLabelCusto;
    private javax.swing.JLabel jLabelDescricao;
    private javax.swing.JLabel jLabelPreco;
    private javax.swing.JLabel jLabelQuantidade;
    private javax.swing.JLabel jLabelQuantidadeMinima;
    private javax.swing.JPanel jPanelInformacoesEstoque;
    private javax.swing.JPanel jPanelProduto;
    private javax.swing.JTextField jTextFieldCodigo;
    private javax.swing.JTextField jTextFieldCodigoDeBarras;
    private javax.swing.JTextField jTextFieldDescricao;
    // End of variables declaration//GEN-END:variables
}
